// 定义表结构和表操作方法
var Mongoose = require('mongoose');
var Schema = Mongoose.Schema;
var ObjectId = Mongoose.SchemaTypes.ObjectId;
var CommentSchema = new Schema({
  movie: {
    // 指定ref 属性 可以在查询时通过popupate方法注入Movie集合中的字段
    type: ObjectId,
    ref: 'Movie'
  },
  from: {
    type: ObjectId,
    ref: 'User'
  },
  reply: [{
    from: {
      type: ObjectId,
      ref: 'User'
    },
    to: {
      type: ObjectId,
      ref: 'User'
    },
    content: String
  }],
  content: {
    type: String,
  },
  to: {
    type: ObjectId,
    ref: 'User'
  },
  meta: {
    createAt: {
      type: Date,
      default: Date.now()
    },
    updateAt: {
      type: Date,
      default: Date.now()
    }
  }
});

// 存储数据之前调用的方法
CommentSchema.pre('save', function (next) {
  // 存储新数据同时更新元数据的建立时间和更新时间
  if (this.isNew) {
    this.meta.createAt = this.meta.updateAt = Date.now();
    // 存储已有数据只需更新元数据的更新时间即可
  } else {
    this.meta.updateAt = Date.now();
  }
  // 继续存储流程
  next();
});

// 表需要实例化后才具有的方法
CommentSchema.statics = {
  // 查询所有电影按照更新时间排序并执行回调
  fetch: function (cb) {
    return this
      .find({})
      .sort('meta.updateAt')
      .exec(cb);
  },
  // 根据ID查询电影并执行回调
  findById: function (id, cb) {
    return this
      .findOne({
        _id: id
      })
      .exec(cb);
  }
};

module.exports = CommentSchema;